/**
*
*
*\author Isabel Martín Herrero 48539974 S
*
*
**/
#include <iostream>
#include <vector>
#include <sstream>
#include "IDibujable.h"
#include "ExcepcionSVG.h"



/**
*\file Lienzo.h
*\brief Archivo .h de la clase Lienzo
*Archivo que contiene la declaración la clase Lienzo
*
**/
using namespace std;

#ifndef _SURICATO_H_
#define _SURICATO_H_

/** \brief Clase Lienzo
 *
 * La clase Lienzo  permite crear, destruir y modificar objetos de tipo Lienzo.Un objeto Lienzo tiene los atributos privados "título", "ancho", "alto".
 * La clase Lienzo es amiga de ostream y de istream
 */

class Lienzo
{
	/** \brief Sobrecarga del operador de entrada de Lienzo
	*
	* Función amiga. Sobrecarga el operador de flujo de entrada para que lea un fichero y saque datos de él
	* \param is Toma como parámetro un objeto de tipo flujo de entrada
	* \param l Lienzo que se modificará tras la lectura del fichero
	* \return Devuelve un objeto de tipo istream
	*/
	friend istream& operator>>(istream& is,Lienzo& l);
	
	/** \brief Sobrecarga del operador de salida de Lienzo
	*
	* Función amiga. Sobrecarga el operador de flujo de salida para que ponga los datos de los objetos en un fichero
	* \param os Toma como parámetro un objeto de tipo flujo de salida
	* \param l Lienzo del que se leerán los datos
	* \return Devuelve un objeto de tipo ostream
	*/
    friend ostream& operator<<(ostream& os,const Lienzo& l); 
	public:
	
		/** \brief Constructor de Lienzo.
		*
		* Crea un objeto de tipo Lienzo, con el título vacío,  y el ancho y el alto a 1000. Si se le pasan parámetros correctos, se asignarán estos en vez de los por defecto
		*/
        Lienzo(string ="", float=1000.0, float=1000.0);
		/** \brief Destructor de Lienzo.
		*
		* Libera la memoria ocupada por un objeto de tipo Lienzo.
		*/
        ~Lienzo();
		
		/** \brief Método getAncho de la clase Lienzo
		*
		* Devuelve el dato miembro ancho 
		* \return Devuelve un float con el ancho
		*/
        float getAncho() const {return ancho;};
		
		/** \brief Método getAlto de la clase Lienzo
		*
		* Devuelve el dato miembro alto
		* \return Devuelve un float con el alto
		*/
        float getAlto() const {return alto;};
		
		/** \brief Método getFiguras de la clase Lienzo
		*
		* Devuelve el vector de figuras
		* \return Devuelve un vector de figuras*
		*/
		vector<IDibujable*> getFiguras() const{return figuras;};

	private:
		/** \brief Miembro título.
		*
		* String que contiene el título del lienzo
		*/
		string titulo;
		/** \brief Miembro Ancho
		*
		* Float que contiene el ancho del lienzo
		*/
		float ancho;
		/** \brief Miembro alto.
		*
		* Float que contiene el alto del lienzo.
		*/
		float alto;
		/** \brief Miembro figuras.
		*
		* IDibujable* contiene las figuras de lienzo;
		*/
		vector<IDibujable*> figuras;
};

#endif
